package com.hot100.easy;





import java.util.Stack;

/**
 * @ClassName Demo02
 * @Description 有效的括号
 * @Author zt
 * @Date 14:16 2022/6/8
 * @Version 1.0
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
 *有效字符串需满足：
 *左括号必须用相同类型的右括号闭合。
 *左括号必须以正确的顺序闭合
 **/
public class Demo02 {

    public static void main(String[] args) {
        String s ="]";
        System.out.println(isValid1(s));
    }


    public static boolean isValid(String s) {
        Stack stack=new Stack();
        for (int i = 0; i < s.length(); i++) {
            String c = String.valueOf(s.charAt(i));
            if(c.equals(")")||c.equals("}")||c.equals("]")){
                String pop;
                if(!stack.empty()){
                    pop= (String) stack.pop();
                }else {
                    return false;
                }
                if((c.equals(")")&&"(".equals(pop))||
                        (c.equals("}")&&"{".equals(pop))
                        ||(c.equals("]")&&"[".equals(pop))){
                }else {
                    return false;
                }
            }else {
                stack.push(c);
            }
        }
       return stack.empty();
    }

    /**
     * 最优解
     * @param s
     * @return
     */
    public static boolean isValid1(String s) {
        Stack<Character>stack = new Stack<Character>();
        for(char c: s.toCharArray()){
            if(c=='(')stack.push(')');
            else if(c=='[')stack.push(']');
            else if(c=='{')stack.push('}');
            else if(stack.isEmpty()||c!=stack.pop())return false;
        }
        return stack.isEmpty();
    }

}